package com.uniandes.edu.co.procesar.defecto;


import java.util.List;

import com.uniandes.edu.co.anotaciones.LogD;
import com.uniandes.edu.co.anotaciones.LogT;
import com.uniandes.edu.co.anotaciones.LogsD;
import com.uniandes.edu.co.anotaciones.LogsT;
import com.uniandes.edu.co.dto.Defecto;
import com.uniandes.edu.co.dto.EtapasDesarrollo;

/**
 * clase encargada de procesar los datos de lo defectos
 * @author Juan Camilo Sanchez
 *
 */
public class ProcesarDefectos {

	/**
	 * instancia unica de la clase
	 */
	@LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=21)})
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1)})
	static private ProcesarDefectos solitario = null;

	/**
	 * metodo que valida que solo este creado una instancia de
	 * la clase
	 * @return la instancia de la clase
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=1, porcentajeRealValorGanado=1),
			@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=3, porcentajeRealValorGanado=1)})
	static public ProcesarDefectos getSingleton() {
		if (solitario == null) {
			solitario = new ProcesarDefectos();
		}
		return solitario;
	}
	
	/**
	 * metodo encargado de agregar los defectos al ciclo
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=2, porcentajeRealValorGanado=1),
			@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=2, porcentajeRealValorGanado=1)})
	public boolean agregarDefecto(String idDefecto,String descripcion,List<Defecto> listado){
		Defecto newDefecto = new Defecto(idDefecto,descripcion);
		listado.add(newDefecto);
		return true;
	}
	
	/**
	 * metodo encargado de modificar los defectos del ciclo
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=2, porcentajeRealValorGanado=1),
			@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=2, porcentajeRealValorGanado=1)})
	public boolean modificarDefecto(String idDefecto,String descripcion,List<Defecto> listado){
		Defecto temp = ProcesarDefectos.getSingleton().buscarDefecto(idDefecto, listado);
		temp.setDescripcion(descripcion);
		return true;
	}
	
	/**
	 * metodo encargado de eliminar los defectos del ciclo
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=2, porcentajeRealValorGanado=1),
			@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=2, porcentajeRealValorGanado=1)})
	@LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=25)})
	public boolean eliminarDefecto(String idDefecto, List<Defecto> listado)
	{
		boolean value=false;
		for(int i=0;i<listado.size();i++)
		{
			if(listado.get(i).getIdDefecto().equals(idDefecto))
			{
				listado.remove(i);
				i = listado.size();
				value =true;
			}
		}
		return value;
	}
	
	/**
	 * metodo encargado de consultar los defectos del ciclo
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=2, porcentajeRealValorGanado=1)})
	@LogsD({@LogD(idCiclo=3, idPersona=20112, etapa=EtapasDesarrollo.INSPECCION, tipo=26)})
	public void consultarDefecto(){
	
	}
	
	/**
	 * metodo encargado de consultar los defectos del ciclo
	 */
	@LogsT({@LogT(taskId=99, idPersona=20112, idCiclo=2, date="20/03/2011", min=2, porcentajeRealValorGanado=1),
			@LogT(taskId=99, idPersona=20111, idCiclo=2, date="21/03/2011", min=2, porcentajeRealValorGanado=1)})
	public Defecto buscarDefecto(String idDefecto, List<Defecto> listado){
		for(int i=0;i<listado.size();i++)
		{
			if(listado.get(i).getIdDefecto().equals(idDefecto))
			{
				return listado.get(i);
			}
		}
		return null;
	}
}